package java_thinking.unit_11._11_13;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;

/**
 * @Description : 需要添加一个方向迭代的功能，此时不能对iterator()进行覆盖，因为覆盖了原方法就无法调用了
 *              此时要添加一个能产生Iterable对象的方法
 * @author: cww
 * @DateTime: 2019-03-19 21:37
 */

class ReversibleArrayList<T> extends ArrayList {
    public ReversibleArrayList(Collection<T> c){
        super(c);
    }

    /**
     * 添加一个能产生Iterable对象的方法
     * @return
     */
    public Iterable<T> reversed(){
        return new Iterable<T>() {
            @Override
            public Iterator<T> iterator() {
                return new Iterator<T>() {
                    int count = size()-1;
                    @Override
                    public boolean hasNext() {
                        return count>-1;
                    }

                    @Override
                    public T next() {
                        return (T) get(count--);
                    }
                };
            }
        };
    }
}

class AdapterMethodIdiom{
    public static void main(String[] args) {
        ReversibleArrayList<String> arrayList = new ReversibleArrayList<>(Arrays.asList("To be or not be".split(" ")));
        for (Object s :arrayList){
            System.out.print(s+" ");
        }
//        arrayList.reversed();
        System.out.println();
        for (String s1 :arrayList.reversed()){
            System.out.print(s1+" ");
        }
    }
}